package ar.com.seminario.controller;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import ar.com.seminario.common.util.ConexiaDateUtil;
import ar.com.seminario.dto.SolicitudCandidatoDto;
import ar.com.seminario.model.SolicitudCandidato;
import ar.com.seminario.service.ISolicitudCandidatoService;
import ar.com.seminario.service.ISolicitudIngresoService;
import ar.com.seminario.service.SolicitudIngresoService;

/**
 * Controller para el manejo de informes.
 * 
 * @author Pablo Lamas
 * 
 */
@Controller
public class InformesController extends GenericController {

	/**
	 * Logger del controller.
	 */
	private static final Logger LOG = LoggerFactory.getLogger(InformesController.class);
	
	/**
	 * Servicio de acceso a {@link SolicitudIngresoService}.
	 */
	@Autowired
	private ISolicitudIngresoService solicitudIngresoService;
	
	/**
	 * Servicio de acceso a {@link SolicitudCandidato}.
	 */
	@Autowired
	private ISolicitudCandidatoService solicitudCandidatoService;
	
	
	/**
	 * Despliega la pantalla de crear informe postulantes.
	 * 
	 */
	@RequestMapping(value = "/crearInformePostulantes", method = RequestMethod.GET)
	public final ModelAndView getPageCrearInformePostulantes(
			final ModelMap model, HttpServletRequest request) {

		try {

			this.getStartModel(model, request);
			model.put("solicitudes", this.solicitudIngresoService.getAllSolicitudes());

		} catch (final Exception e) {
			InformesController.LOG.error("Error creando el Dto de datos del informe.");
		}
		
		return (new ModelAndView("crear-informe-postulantes", model));

	}
	
	/**
	 * Retorna los datos de los candidatos de una solicitud para el reporte.
	 */
	@SuppressWarnings("deprecation")
	@RequestMapping(value = "/getCandidatosInforme", method = RequestMethod.POST)
	@ResponseBody
	public final String getCandidatosInforme(ModelMap model, HttpServletResponse response, Long idSolicitud) {

		String respuesta = new String("");

		try {
			
			for (SolicitudCandidatoDto solicitudCandidatoDto : 
					this.solicitudCandidatoService.getPostulantesAsociados(idSolicitud)) {
				
				respuesta = respuesta + "{"; 
				
				respuesta = respuesta + "\"apellido\":\"" + solicitudCandidatoDto.getCandidatoDto().getApellido() + "\",";
				respuesta = respuesta + "\"nombre\":\"" + solicitudCandidatoDto.getCandidatoDto().getNombre() + "\",";
				respuesta = respuesta + "\"fechaNacimiento\":\"" + ConexiaDateUtil.getDateFormateada(new Date(solicitudCandidatoDto.getCandidatoDto().getFechaNacimiento())) + "\",";
				respuesta = respuesta + "\"condicionesLaboralActual\":\"" + solicitudCandidatoDto.getCandidatoDto().getCondicionesLaboralActual() + "\",";
				respuesta = respuesta + "\"estado\":\"" + solicitudCandidatoDto.getEstadoRelacionDescripcion() + "\"";
				
				respuesta = respuesta + "},"; 
			}
			
			respuesta = respuesta.substring(0, respuesta.length()-1);

			respuesta = respuesta + "]"; 		
			respuesta = "[" + respuesta; 

		} catch (Exception e) {
			respuesta = this.armarRespuesta(false, "Error guardando los datos de la pagina. Por favor, intentelo nuevamente.");
		}

		return respuesta;
	}
}
